PostgreSQLのインストール

概要:PostgreSQL(ポストグレス、ポスグレ)は、フリー(料金、ライセンス、2次配布)で利用できるオープンソースのオブジェクトリレーショナルデータベース管理システム (ORDBMS)である。

1. PostgreSQLインストール

# rpm -qa postgresql* ← postgresqlパッケージの確認。
postgresql-libs-8.1.18-2.el5_4.1
# yum -y install postgresql postgresql-server ← postgresqlのインストール
  :
  :
==========================================================================================
 Package                      Arch          Version                  Repository      Size
==========================================================================================
Installing:
 postgresql                   i386          8.1.18-2.el5_4.1         updates        2.8 M
 postgresql-server            i386          8.1.18-2.el5_4.1         updates        3.8 M
 jpackage-utils               noarch        1.7.3-1jpp.2.el5         base            61 k
 libgcj                       i386          4.1.2-46.el5_4.2         updates         16 M

Transaction Summary
==========================================================================================
Install      4 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

PostgreSQLをyumでインストールするとPostgreSQL用のスーパーユーザーpostgresが自動的に作成される。このユーザーにはパスワードが設定されてないので、rootからsuしてから使用する。

# id postgres
uid=26(postgres) gid=26(postgres) 所属グループ=26(postgres) context=user_u:system_r:unconfined_t
# su - postgres
-bash-3.2$

2. PostgreSQLの設定
サービスに登録されていることを確認する。
「/etc/init.d/」に「postgresql」という PostgreSQL の起動・停止を行なうスクリプトが追加されている。

# ls /etc/init.d/
pand        pcscd       portmap     postgresql  psacct

マシンを起動したときにPostgreSQLも起動するように設定する。設定は「chkconfig」コマンドで行なう。「on」でマシン起動時に起動するようにし、「--list」で状態を確認する。

# chkconfig postgresql on
# chkconfig --list postgresql
postgresql      0:off   1:off   2:on    3:on    4:on    5:on    6:off

3. PostgreSQLの起動
postgresqlサービスを起動する。 初めて起動したときは、「データベースクラスタの初期化(initdb)」 が行なわれる。これは、データベースを使うために必要なディレクトリ構成を作る処理で、「/var/lib/pgsql/data/」に作成さる。

# /etc/init.d/postgresql start
データベースを初期化中:                                    [  OK  ]
postgresql サービスを開始中:                               [  OK  ]

PostgreSQLに接続する「psql」コマンド を使って、データベースの一覧を表示する。
※ 「-U」オプション で、コマンドを実行する PostgreSQL 上のユーザを指定できます。(省略すると、ログインしているアカウントと同じ名前のユーザで接続して実行しようとします。)

# su - postgres
-bash-3.2$ psql -l
        List of databases
   Name    |  Owner   | Encoding
-----------+----------+----------
 postgres  | postgres | UTF8
 template0 | postgres | UTF8
 template1 | postgres | UTF8
(3 rows)

4. DBオーナーユーザーの作成
PostgreSQLのDBオーナーユーザー(ロール)を作成する。DBオーナーユーザーはDBの作成などの権限を持ったユーザーである。

  1. ) DBオーナーユーザーの作成
    # useradd -g postgres dbowner
    # passwd dbowner ← 必要に応じてパスワードを設定する。
    # su - postgres
    -bash-3.2$ createuser dbowner
    Shall the new role be a superuser? (y/n) n
    Shall the new role be allowed to create databases? (y/n) y
    Shall the new role be allowed to create more new roles? (y/n) n
    CREATE ROLE
    
    DBのログインパスワードを設定する場合。
    -bash-3.2$ createuser -P dbowner ← Pオプションを付ける。
    Enter password for new role:xxxxxx
    Enter it again:xxxxxx
    Shall the new role be a superuser? (y/n) n
    Shall the new role be allowed to create databases? (y/n) y
    Shall the new role be allowed to create more new roles? (y/n) n
    CREATE ROLE
    -bash-3.2$ exit
    logout
    
  2. ) 確認テスト
    DBを作成・削除する。
    1. DBの作成
      # su - dbowner
      $ createdb mydb ← DBの作成
      CREATE DATABASE
      $ psql -l
              List of databases
         Name    |  Owner   | Encoding
      -----------+----------+----------
       mydb      | dbowner  | UTF8
       postgres  | postgres | UTF8
       template0 | postgres | UTF8
       template1 | postgres | UTF8
      (4 rows)
      
    2. DBへの接続
      $ psql mydb
      Welcome to psql 8.1.18, the PostgreSQL interactive terminal.
      
      Type:  \copyright for distribution terms
             \h for help with SQL commands
             \? for help with psql commands
             \g or terminate with semicolon to execute query
             \q to quit
      
      mydb=> \q ← \qとタイプしてEnterで終了。
      
    3. DBの削除
      $ dropdb mydb ← DBの削除
      DROP DATABASE
      

5. ログ出力の変更
PostgreSQLのログは/var/lib/pgsql/data/pg_log/のディレクトリーに起動した日の曜日名のついたファイルを作ってログを書き込んでいる。

# ls /var/lib/pgsql/data/pg_log
postgresql-Fri.log  postgresql-Thu.log

しかし、デフォルトの設定では

# su - dbowner 
$ psql postgres
postgres=> select * from abc;
ERROR:  relation "abc" does not exist
postgres=> \q

の結果

ERROR: relation "abc" does not exist

のように記録日時が記述されないので、記録日時が確認できるように設定する。

# vi /var/lib/pgsql/data/postgresql.conf
#log_line_prefix = '' 
  
log_line_prefix = '%m %d [%p-%l]  '
# /etc/init.d/postgresql reload ← 設定を再読み込みする。
# su - dbowner 
$ psql postgres
postgres=> select * from abc;
ERROR:  relation "abc" does not exist
postgres=> \q
$ exit
# vi /var/lib/pgsql/data/pg_log/postgresql-Fri.log
2010-04-30 12:11:49.423 JST postgres [3398-1] ERROR:  relation "abc" does not exist

6. データベースクラスタの環境変更
デフォルトで作成されるデータベースクラスタはディレクトリー/var/lib/pgsql/data/に作成され、エンコーディングはUTF-8、ポート番号は5432である。
データベースクラスタ作成時に環境を変更するにはオプションを以下のようにする。

$ initdb --pgdata=/home/postgres/data/ --encoding=EUC_JP

ポート番号は/home/postgres/data/下に作成されるpostgresql.confの中のportの#を外し変更する。

#port = 5432
  
port = ポート番号

PostgreSQLを起動時にオプションを付けて起動する。

$ postmaster -p ポート番号 -D /home/postgres/data 

上記に応じてマシン起動時にPostgreSQLを起動するスクリプト「/etc/init.d/postgresql」を修正するか、これをコピーしてpostgresql2を作成し修正し、マシン起動時に起動するように設定する。


最終更新のRSS
Last-modified: 2014-03-11 (火) 01:59:57 (3701d)